package com.example.yangjintingtest.service;

import com.example.yangjintingtest.domain.Comment;
import com.example.yangjintingtest.mapper.CommentRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;

import java.util.Optional;
import java.util.concurrent.TimeUnit;

@Service
public class ApiCommentService {
    @Autowired
    private CommentRepository commentRepository;  // 数据库操作接口
    @Autowired
    private RedisTemplate redisTemplate;          // Redis缓存操作模板

    public Comment findById(int comment_id) {
        // 1. 先尝试从Redis读取缓存
        Object object = redisTemplate.opsForValue().get("comment_" + comment_id);
        if (object != null) {
            return (Comment) object;  // 缓存命中直接返回
        } else {
            // 2. 缓存未命中时查询数据库
            Optional<Comment> optional = commentRepository.findById(comment_id);
            if (optional.isPresent()) {
                Comment comment = optional.get();
                // 3. 将查询结果写入Redis（有效期1天）
                redisTemplate.opsForValue().set("comment_" + comment_id, comment, 1, TimeUnit.DAYS);
                return comment;  // 返回数据库查询结果
            } else {
                return null;      // 数据不存在
            }
        }
    }

    public Comment updateComment(Comment comment){
        commentRepository.updateComment(comment.getAuthor(), comment.getAId());
        // 更新数据后进行缓存更新
        redisTemplate.opsForValue().set("comment_"+comment.getId(),comment);
        return comment;
    }

    public void deleteComment(int comment_id){
        commentRepository.deleteById(comment_id);
        // 删除数据后进行缓存删除
        redisTemplate.delete("comment_"+comment_id);
    }
}
